﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Services;
using MSBDATAModel;
/// <summary>
/// Summary description for LienMinhWS
/// </summary>
[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
// To allow this Web Service to be called from script, using ASP.NET AJAX, uncomment the following line. 
// [System.Web.Script.Services.ScriptService]
public class LienMinhWS : System.Web.Services.WebService {

    MSBDATAEntities entities = new MSBDATAEntities();

    public LienMinhWS () {

        //Uncomment the following line if using designed components 
        //InitializeComponent(); 
       
    }
    
    #region Thông tin ws cho phân hệ ngân hàng
    [WebMethod(true)]
    public string Authenticate(string MaGiaoDich, string MatKhau)
    {
        try
        {
            TAI_KHOAN_LIEN_MINH tk = entities.TAI_KHOAN_LIEN_MINH.First(t => t.MaGiaoDich == MaGiaoDich);
            if (tk.MatKhau != MatKhau)
                return "Fail";

            string sid = Guid.NewGuid().ToString();
            Application[sid] = true;
            Application["login"] = MaGiaoDich;
            return sid;
        }
        catch (Exception)
        {
            return "Fail";
        }
    }

    /// <summary>
    /// Hàm chuyển khoản với liên ngân hàng.
    /// </summary>
    /// <param name="sid"></param>
    /// <param name="LoaiGiaoDich"></param>
    /// <param name="MaTKNganHang"></param>
    /// <param name="MaTaiKhoanLienMinh"></param>
    /// <param name="SoTien"></param>
    /// <param name="MaTienTe"></param>
    /// <returns>
    /// 0: Thành công
    /// 1: Tài khoản ngân hàng (MaTKNganHang) không tồn tại
    /// 2: Tài khoản gửi không đủ tiền
    /// 3: Lỗi khác
    /// </returns>
    [WebMethod(true)]
    public int Transfer(string sid, int MaLoaiGiaoDich, string SoTKNganHang, string SoTaiKhoanLienMinh,
        float SoTien, string MaTienTe)
    {
        GIAO_DICH_NGAN_HANG giaoDich = GIAO_DICH_NGAN_HANG.CreateGIAO_DICH_NGAN_HANG(0);
        giaoDich.SoTien = SoTien;
        giaoDich.MaTKLienMinh = SoTaiKhoanLienMinh;
        giaoDich.MaTKNganHang = SoTKNganHang;
        giaoDich.ThoiGianGD = DateTime.Now;
        // Kiểm tra SID
        if (Application[sid] == null || Application["login"] == null)
        {
            giaoDich.C_KET_QUA_GD_NGAN_HANG =
                          entities.C_KET_QUA_GD_NGAN_HANG.First(k => k.MaKetQua == 3);
            entities.AddToGIAO_DICH_NGAN_HANG(giaoDich);
            if (entities.SaveChanges() > 0)
                return 6;
            return 6;
        }
        
        try
        {
            string maLienMinh = Application["login"].ToString();
            giaoDich.TAI_KHOAN_LIEN_MINH = entities.TAI_KHOAN_LIEN_MINH.First(l => l.MaGiaoDich == maLienMinh);

            giaoDich.C_TIEN_TE = entities.C_TIEN_TE.First(t => t.MaTienTe == MaTienTe);
            giaoDich.C_LOAI_GD_NGAN_HANG = entities.C_LOAI_GD_NGAN_HANG.First(l => l.MaLoaiGD == MaLoaiGiaoDich);
        }
        catch (Exception)
        {
            giaoDich.C_KET_QUA_GD_NGAN_HANG =
                           entities.C_KET_QUA_GD_NGAN_HANG.First(k => k.MaKetQua == 3);
            entities.AddToGIAO_DICH_NGAN_HANG(giaoDich);
            if (entities.SaveChanges() > 0)
                return 6;
            return 6;
        }
        int tyGiaMoiNhat = entities.C_TY_GIA.ToList().Count -1;
        giaoDich.C_TY_GIA = entities.C_TY_GIA.ToList()[tyGiaMoiNhat];
        
        try {
           
            
            
            THE_THANH_TOAN theNH = entities.THE_THANH_TOAN.First(t => t.SoThe == SoTKNganHang);

            // goi WS kiem tra the hop le o day
            




            // Rút tiền
            if (MaLoaiGiaoDich == 1)
            {
                if (theNH.TAI_KHOAN_NGAN_HANG.SoTien < giaoDich.SoTien)
                {
                    giaoDich.C_KET_QUA_GD_NGAN_HANG =
                           entities.C_KET_QUA_GD_NGAN_HANG.First(k => k.MaKetQua == 2);
                    entities.AddToGIAO_DICH_NGAN_HANG(giaoDich);
                    if (entities.SaveChanges() > 0)
                        return 2;
                    return 6;
                }
                else
                {
                    theNH.TAI_KHOAN_NGAN_HANG.SoTien -= giaoDich.SoTien;



                    giaoDich.C_KET_QUA_GD_NGAN_HANG =
                          entities.C_KET_QUA_GD_NGAN_HANG.First(k => k.MaKetQua == 0);

                    entities.AddToGIAO_DICH_NGAN_HANG(giaoDich);
                    if (entities.SaveChanges() > 0)
                        return 0;
                    return 6;
                }
            }
            // chuyển tiền vô
            if (MaLoaiGiaoDich == 1)
            {
                theNH.TAI_KHOAN_NGAN_HANG.SoTien += giaoDich.SoTien;
                giaoDich.C_KET_QUA_GD_NGAN_HANG =
                          entities.C_KET_QUA_GD_NGAN_HANG.First(k => k.MaKetQua == 0);
                entities.AddToGIAO_DICH_NGAN_HANG(giaoDich);
                if (entities.SaveChanges() > 0)
                    return 0;
                return 6;
            }
            giaoDich.C_KET_QUA_GD_NGAN_HANG =
                           entities.C_KET_QUA_GD_NGAN_HANG.First(k => k.MaKetQua == 6);
            entities.AddToGIAO_DICH_NGAN_HANG(giaoDich);
            if (entities.SaveChanges() > 0)
                return 6;
            return 6;

        }
        catch (Exception) {
            giaoDich.C_KET_QUA_GD_NGAN_HANG =
                           entities.C_KET_QUA_GD_NGAN_HANG.First(k => k.MaKetQua == 1);
            entities.AddToGIAO_DICH_NGAN_HANG(giaoDich);
            if (entities.SaveChanges() > 0)
                return 1;
            return 6;
        }
    }
    #endregion
    
}
